from .utils import *
import re

# 获取电影类型数据 -- 要进行处理 -- 按逗号分隔、去重
def getAllTypes():
    typeList = list(set(typeList1('types')))
    return typeList

# 获取全部电影类型的评分以及评分个数 / 某电影类型的评分以及评分个数
def getAllRateDataByType(type):
    # 获取全部电影类型的评分以及评分个数
    if type == 'all':
        rateList = df['rate'].values
        rateList.sort()
    # 获取某电影类型的评分以及评分个数
    else:
        # 所有电影类型
        typeList = df['types'].map(lambda x: x.split(sep=','))
        # 所有电影评分
        allRateList = df['rate'].values
        rateList = []
        # 每个电影类型的评分（item）以及评分个数（i）
        for i, item in enumerate(typeList):
            if type in item:
                rateList.append(allRateList[i])
    # 词频统计 -- 数据统计
    rateObj = {}
    for i in rateList:
        if rateObj.get(i, -1) == -1:
            rateObj[i] = 1
        else:
            rateObj[i] = rateObj[i] + 1
    return list(rateObj.keys()), list(rateObj.values())

# 获取获取stars评分星级 -- 5星到1星
def getStars(searchIpt):
    # df.loc[] -- Pandas 中用于基于标签进行索引和选择数据的方法。它可以用来选择特定行和列的数据，也可以用来进行切片和布尔索引
    # 注意，df.iloc[] 用于基于整数位置来选择行和列
    # df['title'].str.contains 是 pandas 中用于检查字符串是否包含特定子字符串的方法。它返回一个布尔值的 Series，指示每个字符串是否包含指定的子字符串。
    # df['title'].str.contains(searchIpt) -- 在电影名称这个series下含有searchIpt的部分 -- list() -> 将series转换成列表
    # 再将字符串按逗号分隔
    # 星级占比 -- 5星 -> 1星
    stars = list(df.loc[df['title'].str.contains(searchIpt)]['stars'])[0].split(sep=',')
    # 电影名称
    searchName = list(df.loc[df['title'].str.contains(searchIpt)]['title'])[0]
    # 设置星级饼图的数据
    starsData = [
        {
            'name': '五星',
            'value': 0
        },
        {
            'name': '四星',
            'value': 0
        },
        {
            'name': '三星',
            'value': 0
        },
        {
            'name': '二星',
            'value': 0
        },
        {
            'name': '一星',
            'value': 0
        }
    ]
    for i, item in enumerate(stars):
        # re.sub('%', '', item) -- 把百分号替换成空，对象为item即stars星级
        # starsData[i]['value'] = item
        # print(re.sub('%', '', item))
        starsData[i]['value'] = float(re.sub('%', '', item))
    # print(starsData)
    return starsData, searchName

# 获取每一个不重复的电影年份的电影评分的均值
def getYearMeanData():
    # 电影年份去重
    yearList = list(set(df['year'].values))
    meanList = []
    # 取对应年份的评分均值
    for i in yearList:
        # print(df[df['year'] == i]['rate'].mean())
        meanList.append(df[df['year'] == i]['rate'].mean())
    return yearList, meanList

# test
# getStars()